#ifndef __CBB_ENC_TYPE_H__
#define __CBB_ENC_TYPE_H__

#include "cbb_type.h"
#include "cbb_camera_comm.h"
#include "cbb_common.h"
#if defined (__cplusplus) || defined (c_plusplus)
extern "C" {
#endif

//!编码器句柄
typedef void* EncoderHandle;

typedef enum {
	CBB_ENCODE_PLATFORM_RK3588 = 0x1,//! RK3588
	CBB_ENCODE_PLATFORM_NVIDIA = 0x2,//! 英伟达
}CBBEncoderPlatformE_t;

typedef enum {
	CBB_ENCODE_CHN_0 = 0,//通道0
	CBB_ENCODE_CHN_1 = 1,//通道1
	CBB_ENCODE_CHN_2 = 2,//通道2
	CBB_ENCODE_CHN_3 = 3,//通道3
	CBB_ENCODE_CHN_4 = 4,//通道4
	CBB_ENCODE_CHN_5 = 5,//通道5
	CBB_ENCODE_CHN_6 = 6,//通道6
	CBB_ENCODE_CHN_7 = 7,//通道7
}CBBEncoderChannelE_t;

typedef enum {
	CBB_CAMERA_FMT_H264 = 0x01,
	CBB_CAMERA_FMT_JPEG = 0x02,
}CbbEncodeTypeE_t;//!编码类型

typedef struct {

}CbbEncoderH264Conf_t;//! H264编码特有的配置

typedef struct {
	hd_s16_t qc;//!质量
}CbbEncoderJpegConf_t;//! JPEG编码特有的配置

typedef struct {
	hd_u16_t channel;//!编码通道，参考 CBBEncoderChannelE_t
	hd_u32_t width;	//!宽
	hd_u32_t height; //!高
	hd_u32_t in_format;//!输入格式 ,参考 标准v4l2框架的videodev2.h头文件定义的数据格式 V4L2_PIX_FMT_XXXX
	hd_u32_t out_format;//编码类型 参考 CbbEncodeTypeE_t
	hd_s16_t rotation;//旋转角度 0-0 1-90 2-180 3-270
	union {
		CbbEncoderJpegConf_t jpeg_conf;
	}special_u;	
}CbbEncoderConf_t;//！图像编码器配置,对应动作:CBB_ENCODER_UPDATE_CONF

typedef struct {
	char res_data[DATA_SIZE_2M];
	hd_u32_t len;
	hd_u32_t index;//!帧ID计数
	hd_u32_t sp_time_us;//编码耗时，单位us
	hd_u32_t out_format; //编码类型,区分H264/JPEG
}CbbEncoderRes_t;//！编码结果

typedef struct {
	union {
		CbbEncoderConf_t conf_s;//!对应动作:CBB_ENCODER_UPDATE_CONF
	}encoder_ctrl_u;
}CbbEncoderCtrlDev_t;
typedef enum {
	CBB_ENCODER_UPDATE_CONF = 0,//！更新编码器配置，输入 CbbEncoderConf_t
} CbbEncoderActionE_t;
#if defined (__cplusplus) || defined (c_plusplus)
}
#endif

#endif // __CBB_ENC_TYPE_H